package com.sdkx.wear_os.utils

import com.google.gson.JsonSyntaxException
import com.sdkx.wear_os.utils.ToastLogUtils.logUtil
import org.json.JSONException
import retrofit2.HttpException
import java.io.ByteArrayOutputStream
import java.io.IOException
import java.io.PrintStream
import java.net.ConnectException
import java.net.SocketTimeoutException
import java.util.concurrent.TimeoutException

/**
 * 根据异常返回相关的错误信息工具类
 */
object ExceptionHandle {

    fun handleException(it: Throwable?): String {
        when (it) {
            is ConnectException -> it.message?.let {
                logUtil("网络连接失败：请检查您的网络后重试", "详细信息：$it")
                return "网络连接失败：请检查您的网络后重试"
            }
            is HttpException ->
                when (it.code()) {
                    404 -> {
                        logUtil(
                            "Exception",
                            "网络连接失败：您所请求的资源无法找到\n错误码：${it.code()}\n详细信息：${it.message()}"
                        )
                        return "网络连接失败：您所请求的资源无法找到"
                    }
                    500 -> {
                        logUtil(
                            "Exception",
                            "网络连接失败：服务器异常，请稍后再试\n错误码：${it.code()}\n详细信息：${it.message()}"
                        )
                        return "网络连接失败：服务器异常，请稍后再试"
                    }
                    else -> {
                        logUtil(
                            "Exception",
                            "网络连接失败：网络异常，请稍后再试\n错误码：${it.code()}\n详细信息：${it.message()}"
                        )
                        return "网络连接失败：网络异常，请稍后再试"
                    }
                }
            is TimeoutException, is SocketTimeoutException -> {
                logUtil("Exception", "详细信息：${it.message}")
                return "请求超时"
            }
            is IOException -> {
                logUtil("Exception", "详细信息：${it}")
                return "数据错误"
            }
            is JSONException -> {
                logUtil("Exception", "数据错误：服务器数据异常\n详细信息：${it.message}")
                return "数据错误：服务器数据异常"
            }
            is JsonSyntaxException -> {
                logUtil("Exception", "数据错误：服务器数据异常\n详细信息：${it.message}")
                return "数据错误：服务器数据异常"
            }
            is NoSuchFileException -> {
                logUtil("Exception", "文件不存在")
                return "文件不存在"
            }
            is IllegalArgumentException -> {
                logUtil("Exception", "未知错误：未知原因错误\n详细信息：${it.message}")
                return ""
            }
            else -> {
                if (it != null) {
                    logUtil("未知错误", "未知错误：未知原因错误\n详细信息：${it.message}")
                }
                return ""
            }
        }
        return "未知错误"
    }

    /**
     * 错误信息
     */
    fun getExceptionInfo(e: Exception): String {
        val baoS = ByteArrayOutputStream()
        e.printStackTrace(PrintStream(baoS))
        return baoS.toString()
    }

    /**
     * 错误信息
     */
    fun getExceptionInfo(e: Throwable): String {
        val baoS = ByteArrayOutputStream()
        e.printStackTrace(PrintStream(baoS))
        return baoS.toString()
    }
}